// 这个中间件用于保护需要登录才能访问的路由。它会验证请求头中的 JWT
const jwt = require('jsonwebtoken');
const db = require('../config/db');

const protect = async (req, res, next) => {
  let token;

  if (req.headers.authorization && req.headers.authorization.startsWith('Bearer')) {
    try {
      // Bearer Token的标准格式是"Bearer <token>"，中间有一个空格分隔。
      // 所以split(' ')会把字符串分成两部分，第一部分是"Bearer"，第二部分才是实际的token。取索引[1]就能拿到token部分。
      token = req.headers.authorization.split(' ')[1];

      // 验证 token
      const decoded = jwt.verify(token, process.env.JWT_SECRET);

      // 获取用户信息并附加到 req 对象上 (不含密码)
      const [rows] = await db.query('SELECT id, username, email, created_at FROM users WHERE id = ?', [decoded.id]);
      
      if (rows.length === 0) {
        return res.status(401).json({ message: '用户未找到，授权被拒绝' });
      }

      req.user = rows[0];
      next();
    } catch (error) {
      return res.status(401).json({ message: '未授权，令牌验证失败' });
    }
  }

  if (!token) {
    return res.status(401).json({ message: '未授权，缺少令牌' });
  }
};

module.exports = { protect };